1 // TODO strokeStyle for areaSegment? 2 3 pv.SvgScene.area = function(scenes) { 4 var e = scenes.$g.firstChild; 5 if (!scenes.length) return e; 6 var s = scenes[0]; 7 8 /* segmented */ 9 if (s.segmented) return this.areaSegment(scenes); 10 11 /* visible */ 12 if (!s.visible) return e; 13 var fill = pv.color(s.fillStyle), stroke = pv.color(s.strokeStyle); 14 if (!fill.opacity && !stroke.opacity) return e; 15 16 /* points */ 17 var p1 = "", p2 = ""; 18 for (var i = 0, j = scenes.length - 1; j >= 0; i++, j--) { 19 var si = scenes[i], sj = scenes[j]; 20 p1 += si.left + "," + si.top + " "; 21 p2 += (sj.left + sj.width) + "," + (sj.top + sj.height) + " "; 22 23 /* interpolate (assume linear by default) */ 24 if (i < scenes.length - 1) { 25 var sk = scenes[i + 1], sl = scenes[j - 1]; 26 switch (s.interpolate) { 27 case "step-before": { 28 p1 += si.left + "," + sk.top + " "; 29 p2 += (sl.left + sl.width) + "," + (sj.top + sj.height) + " "; 30 break; 31 } 32 case "step-after": { 33 p1 += sk.left + "," + si.top + " "; 34 p2 += (sj.left + sj.width) + "," + (sl.top + sl.height) + " "; 35 break; 36 } 37 } 38 } 39 } 40 41 e = this.expect("polygon", e); 42 e.setAttribute("cursor", s.cursor); 43 e.setAttribute("points", p1 + p2); 44 var fill = pv.color(s.fillStyle); 45 e.setAttribute("fill", fill.color); 46 e.setAttribute("fill-opacity", fill.opacity); 47 var stroke = pv.color(s.strokeStyle); 48 e.setAttribute("stroke", stroke.color); 49 e.setAttribute("stroke-opacity", stroke.opacity); 50 e.setAttribute("stroke-width", s.lineWidth); 51 return this.append(e, scenes, 0); 52 }; 53 54 pv.SvgScene.areaSegment = function(scenes) { 55 var e = scenes.$g.firstChild; 56 for (var i = 0, n = scenes.length - 1; i < n; i++) { 57 var s1 = scenes[i], s2 = scenes[i + 1]; 58 59 /* visible */ 60 if (!s1.visible || !s2.visible) continue; 61 var fill = pv.color(s1.fillStyle), stroke = pv.color(s1.strokeStyle); 62 if (!fill.opacity && !stroke.opacity) continue; 63 64 /* points */ 65 var p = s1.left + "," + s1.top + " " 66 + s2.left + "," + s2.top + " " 67 + (s2.left + s2.width) + "," + (s2.top + s2.height) + " " 68 + (s1.left + s1.width) + "," + (s1.top + s1.height); 69 70 e = this.expect("polygon", e); 71 e.setAttribute("cursor", s1.cursor); 72 e.setAttribute("points", p); 73 e.setAttribute("fill", fill.color); 74 e.setAttribute("fill-opacity", fill.opacity); 75 e.setAttribute("stroke", stroke.color); 76 e.setAttribute("stroke-opacity", stroke.opacity); 77 e.setAttribute("stroke-width", s1.lineWidth); 78 e = this.append(e, scenes, i); 79 } 80 return e; 81 }; 82